입출력 시스템과 저장장치

@Wonyu· January 09, 2025 · 10 min read

입출력 버스

✅ 컴퓨터는 필수 장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성
✅ 각 장치는 메인보드에 있는 버스로 연결된다.
여러 입출력 작업을 병렬적으로 처리할 수 있도록 여러 데이터 전송 경로를 두는데 이를 채널

주변 장치

  • 저속 주변장치: 메모리와 주변장치 사이에 오고 가는 데이터 양이 적어 데이터 전송률이 낮다. ex) 키보드, 마우스, 프린터 등
  • 고속 주변장치: 대용량의 데이터가 오고 가기 때문에 데이터 전송률이 높다. ex) 그래픽카드, 하드디스크, SSD 등 고속 주변장치가 저속 주변장치와 입출력 버스를 공유하면 입출력 속도가 현저히 저하되므로, 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영한다.

✅ 입출력 버스가 구분되기 때문에 입출력 장치에 대한 관리를 I/O Controller가 수행한다.

📌 DMA(직접 메모리 접근)

CPU의 개입 없이 I/O Controller가 메모리에 직접 접근할 수 있는 기술이다.
CPU의 작업 공간과 DMA Controller의 작업 공간이 겹치는 것을 방지하기 위해 메인메모리의 일부를 DMA Controller에 할당한다.
✅ I/O 작업이 완료되면, I/O Controller는 CPU에 인터럽트를 보내 작업 완료를 알린다.

📌 폴링 방식

✅ CPU가 일정한 간격으로 IO 장치를 확인하며 데이터가 준비되었는지 직접 검사하는 방식
✅ 특징

  • 소프트웨어 기반: CPU가 직접 장치를 확인
  • CPU 부하 증가
  • 비효율적, 성능 저하 초래

📌 인터럽트 방식

✅ IO 장치에서 데이터가 준비되었을 때 CPU에 신호(인터럽트)를 보내 작업을 요청하는 방식
✅ 특징

  • 하드웨어 기반: 인터럽트 컨트롤러와 같은 추가 하드웨어 필요
  • CPU 부하 감소
  • 구현이 복잡함: 인터럽트 핸들러를 운영체제에서 구현해야 함

📌 인터럽트 종류

인터럽트는 입출력 장치에서만 발생하는 것이 아닌 CPU가 시스템을 효율적으로 운영하는 데 필수적인 메커니즘이다.

구분 설명 예시
하드웨어 인터럽트 외부 장치(입출력 장치, 타이머, 전원 등)에서 발생하는 인터럽트 키보드 입력, 디스크 데이터 전송 완료, 타이머
소프트웨어 인터럽트 프로그램이 명령어를 실행하여 발생하는 인터럽트 시스템 콜, 예외 처리 (ex. INT 0x80)
예외 인터럽트 프로그램 실행 중 오류가 발생할 때 발생하는 인터럽트 0으로 나누기 오류, 페이지 폴트
비동기 인터럽트 현재 실행 중인 코드와 무관하게 발생하는 인터럽트 키보드 입력, 네트워크 데이터 수신
동기 인터럽트 실행 중인 명령어의 결과로 발생하는 인터럽트 시스템 콜, 잘못된 명령어 실행

인터럽트 처리 과정

  1. I/O 장치나 시스템 이벤트가 인터럽트를 발생
  2. CPU는 현재 실행 중인 작업을 중단
  3. 인터럽트 벡터를 이용해 적절한 인터럽트 핸들러를 호출
  4. 인터럽트 핸들러가 인터럽트를 처리한 후 CPU가 원래 작업으로 복귀

인터럽트 벡터와 인터럽트 핸들링

  • 인터럽트 벡터: 각 인터럽트 신호의 핸들러 주소를 저장한 테이블
  • 인터럽트 핸들러: 특정 인터럽트 발생 시 실행되는 코드

다중 인터럽트 발생 시 처리 방식

  • 우선순위 기반 처리 → 중요한 인터럽트를 먼저 처리 (ex: 타이머 인터럽트)
  • 중첩 인터럽트(Nested Interrupts) → 높은 우선순위 인터럽트가 낮은 우선순위 인터럽트를 중단하고 먼저 실행
  • 인터럽트 큐(Interrupt Queue) → 우선순위가 같은 경우 FIFO(First-In-First-Out)로 처리

저장장치

📌 하드디스크

섹터는 하드디스크의 가장 작은 저장 단위다. 하나의 섹터에는 한 덩어리의 데이터가 저장된다. 트랙은 플래터에서 회전축을 중심으로 데이터가 기록되는 동일한 동심원상에 있는 섹터의 집합이다. 여러 개의 플래터에 있는 같은 트랙의 집합을 실린더라고 부른다.

하드디스크에서 데이터를 가져오는 데 걸리는 총시간은 탐색 시간 + 회전 지연 시간 + 전송 시간이다. 이 중 가장 오래 걸리는 것이 탐색 시간이다.

📌 SSD

하드디스크는 모터로 헤드를 이동시키기 때문에 느리다. 반면 SSD는 전자의 이동으로 작동하기 때문에 하드디스크보다 훨씬 속도가 빠르고 소음을 발생시키지 않는다. 하지만 가격이 훨씬 비싸다는 단점이 있다.

SS의 가장 큰 장점은 빠른 데이터 입출력 속도다. 현재는 하드디스크의 전송 속도를 수십 배 뛰어넘고 있다.


디스크 스케줄링 알고리즘

디스크의 데이터 전송 시간 중 탐색 시간이 가장 느리다. 따라서 디스크 스케줄링을 통해 탐색을 위한 트랙의 이동을 최소화한다.

📌 FCSFS 디스크 스케줄링

가장 단순한 디스크 스케줄링 방식으로 요청이 들어온 트랙 순서대로 서비스한다.

📌 SSTF 디스크 스케줄링

현재 헤드가 있는 위치에서 가장 가까운 트랙부터 서비스한다.

📌 블록 SSTF 디스크 스케줄링

큐에 있는 트랙 요청을 일정한 블록 형태로 묶은 후 블록으로 묶인 트랙들만 순서를 변경한다.

📌 SCAN 디스크 스케줄링

헤드가 움직이기 시작하면 맨 마지막 트랙에 도착할 때까지 되돌아 가지 않고 계속 앞으로만 전진하면서 요청받은 트랙을 서비스한다.

📌 C-SCAN 디스크 스케줄링

SCAN 기법을 변형한 것으로, 헤드가 한쪽 방향으로 움직일 때는 요청받은 트랙을 서비스하고 반대 방향으로 돌아올 때는 서비스하지 않는다.

📌 LOOK 디스크 스케줄링

더 이상 서비스할 트랙이 없으면 헤드가 끝까지 가지 않고 중간에서 방향을 바꾼다.


RAID

저장장치에는 최대 사용 횟수가 정해져 있다. 따라서 중요한 데이터는 수시로 백업해야 하는데 이를 자동으로 수행하는 시스템이 RAID(Redundant Array of Independant Disks)이다.

RAID는 동일한 규격의 디스크를 여러 개 모아 구성하며, 장애가 발생했을 때 데이터를 복구하는 데 사용된다. 이는 하나의 원본 디스크와 같은 크기의 백업 디스크에 같은 내용을 동시에 저장하고, 한 디스크가 고장 났을 때 다른 디스크를 사용해 복구하는 방식으로 동작하며, 이를 미러링이라고 한다.

RAID에는 여러 디스크에 데이터를 동시에 저장해 데이터의 입출력 속도를 높이는 방식도 있다. 이렇게 데이터를 여러 조각으로 나눠 보내는 방식을 스트라이핑이라고 한다.

@Wonyu
Hello :) I'm Wonyu